//package com.ds.common.oss.core;
//
//import com.google.common.collect.Multimap;
//import io.minio.http.Method;
//import io.minio.messages.Part;
//import lombok.SneakyThrows;
//import software.amazon.awssdk.services.s3.model.ListPartsResponse;
//
//import java.util.Map;
//import java.util.concurrent.TimeUnit;
//
///**
// * <p> minio断点续传，分片上传，秒传扩展工具类 </p>
// *
// * @author fs
// * @description
// * @date 2023/1/5 17:20
// */
//
//public class AsyncMinioClient extends MinioAsyncClient {
//    public AsyncMinioClient(MinioAsyncClient client) {
//        super(client);
//    }
//
//    /**
//     * 判断文件是否存在
//     *
//     * @param bucketName 存储桶
//     * @param objectName 对象
//     * @return true:存在 false:失败
//     * @author zhengqingya
//     * @date 2023/1/5 17:20
//     */
//    @SneakyThrows
//    public boolean doesObjectExist(String bucketName, String objectName) {
//        boolean isExist = true;
//        try {
//            super.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());
//        } catch (Exception e) {
//            isExist = false;
//        }
//        return isExist;
//    }
//
//    /**
//     * 上传分片上传请求，返回uploadId
//     *
//     * @param bucketName 存储桶
//     * @param objectName 对象名
//     * @param headers    请求头 可以设置文件的content_Type 默认是 application/stream
//     * @return uploadId
//     * @author zhengqingya
//     * @date 2023/1/5 17:22
//     */
//    @SneakyThrows
//    public String getUploadId(String bucketName, String objectName, Multimap<String, String> headers) {
//        return super.createMultipartUploadAsync(bucketName, null, objectName, headers, null).get().result().uploadId();
//    }
//
//
//    /**
//     * 分片上传的预签名上传地址  过期时间为1天 put请求url
//     *
//     * @param bucketName  桶名
//     * @param filePath    Oss文件路径
//     * @param queryParams 查询参数
//     * @return 分片上传的预签名上传地址
//     * @author zhengqingya
//     * @date 2023/1/5 17:25
//     */
//    @SneakyThrows
//    public String getPreSignedObjectUrl(String bucketName, String filePath, Map<String, String> queryParams) {
//        return super.getPresignedObjectUrl(
//                GetPresignedObjectUrlArgs.builder()
//                                         .method(Method.PUT)
//                                         .bucket(bucketName)
//                                         .object(filePath)
//                                         .expiry(1, TimeUnit.DAYS)
//                                         .extraQueryParams(queryParams)
//                                         .build());
//    }
//
//    /**
//     * 查询分片数据
//     *
//     * @param bucketName 存储桶
//     * @param objectName 对象名
//     * @param uploadId   上传ID
//     * @return io.minio.ListPartsResponse
//     * @author zhengqingya
//     * @date 2023/1/5 17:41
//     */
//    @SneakyThrows
//    public ListPartsResponse listMultipart(String bucketName, String objectName, String uploadId) {
//        return super.listPartsAsync(bucketName, null, objectName, 1000, 0, uploadId, null, null).get();
//    }
//
//    /**
//     * 完成分片上传
//     *
//     * @param bucketName  存储桶
//     * @param fileName    文件名
//     * @param uploadId    上传ID
//     * @param parts       分片
//     * @return io.minio.CompleteMultipartUploadResponse
//     * @author zhengqingya
//     * @date 2023/1/5 17:41
//     */
//    @SneakyThrows
//    public ObjectWriteResponse completeMultipartUpload(String bucketName, String fileName, String uploadId, Part[] parts) {
//        return super.completeMultipartUpload(bucketName, null, fileName, uploadId, parts, null, null);
//    }
//
//}
